package top.jianx.music.api;

import top.jianx.music.model.Album;
import top.jianx.music.model.MusicLink;
import top.jianx.music.model.Song;

import java.io.IOException;
import java.util.List;

/**
 * 音乐Apis
 *
 * @author Jianx <jianx70687547@gmail.com>
 * @date 2022/1/16 11:13
 * @since 1.0.0
 */
public interface MusicApi {

    /**
     * 使用关键词查询歌曲
     *
     * @param keyword {@linkplain String} 搜索关键词
     * @param page {@linkplain Integer} 每页数量
     * @param needLink {@linkplain Boolean} 需要链接
     * @return {@linkplain Song} 歌曲Lists
     */
    List<? extends Song> searchMusicSync(String keyword, int page, boolean needLink) throws IOException;

    /**
     * 获取某歌曲id对应的音乐链接
     *
     * @param musicId {@linkplain String} 音乐ID
     * @return {@linkplain MusicLink} 歌词链接
     * @throws Exception 异常信息对象
     */
    MusicLink getMusicLinkByIdSync(String musicId) throws IOException;

    /**
     * 获取某歌曲ids对应的歌曲详细信息
     *
     * @param musicIds {@linkplain String} 音乐IDs
     * @param needLyric {@linkplain Boolean} 需要歌词
     * @return {@linkplain Song} 歌曲Lists
     * @throws IOException 异常信息对象
     */
    List<? extends Song> getSongDetailInfoByIdsSync(boolean needLyric, String... musicIds) throws IOException;

    /**
     * 获取专辑id对应的专辑信息
     *
     * @param albumId {@linkplain String} 专辑ID
     * @param needLink {@linkplain Boolean} 需要链接
     * @return {@linkplain Album} 专辑信息
     * @throws Exception 异常信息对象
     */
    Album getAlbumInfoByIdSync(String albumId, boolean needLink) throws IOException;
}
